package com.qingcloud.adminbackend.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qingcloud.adminbackend.entity.equipment.ModelDTO;
import com.qingcloud.adminbackend.entity.sysstation.*;
import com.qingcloud.adminbackend.entity.sysstation.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 监测点信息表 Mapper 接口
 * </p>
 *
 * @author liyuhong
 * @since 2019-01-02
 */
public interface SysStationMapper extends BaseMapper<SysStation> {
    /**
     * 批量添加监测点
     *
     * @param stations
     */
    void insertStations(@Param("stations") List<SysStation> stations);

    /**
     * 编辑监测点状态
     *
     * @param stationId
     * @param status
     */
    void updateStationByStationId(@Param("stationId") String stationId, @Param("status") Integer status);

    /**
     * 验证监测点是否存在
     *
     * @param ids
     * @return
     */
    List<String> findStations(@Param("ids") List<String> ids);

    /**
     * 获取站点详情
     *
     * @param stationId
     * @return
     */
    StationDetailsDTO details(@Param("stationId") String stationId);

    /**
     * 更新站点状态
     *
     * @param stationIds
     * @param status
     */
    void updateStatus(@Param("stationIds") List<String> stationIds, @Param("status") Integer status);

    /**
     * 逻辑删除
     *
     * @param stationId
     * @return
     */
    Integer logicDelete(@Param("stationId") String stationId);

    /**
     * 查询站点的共享信息
     *
     * @param stationIds
     * @return
     */
    IPage<StationShareDTO> selectShareByPage(Page<StationShareDTO> page, @Param("stationIds") List<String> stationIds);

    List<StationShareDTO> selectShare(@Param("stationIds") List<String> stationIds);

    List<MountStationInfo> getMountInfo(@Param("stationId") String stationId);


    IPage<StationListDTO> getStationList(Page<StationShareDTO> page, @Param("param") StationListPara stationListPara,
                                         @Param("stationList") List<ModelDTO> stationData, @Param("userId") String userId,
                                         @Param("crawlerFlag") Integer crawlerFlag);

    /**
     * 监测点数据导出
     *
     * @param stationListPara
     * @param stationData
     * @param userId
     * @param crawlerFlag
     * @return
     */
    List<StationExportDTO> exportData(@Param("param") StationListPara stationListPara,
                                      @Param("stationList") List<ModelDTO> stationData, @Param("userId") String userId,
                                      @Param("crawlerFlag") Integer crawlerFlag);

    Integer setShare(@Param("stationIds") List<String> stationIds, @Param("status") Integer status);

    /**
     * 批量删除监测点
     *
     * @param stations
     */
    void deleteStations(@Param("stations") List<SysStation> stations);

    /**
     * 超管查看全部监测点
     *
     * @param orderIds 订单编号
     * @param orgIds   客户ID
     * @param status   状态 null 所有 1有效
     * @return
     */
    List<ModelDTO> getStationAllIds(@Param("orderIds") List<String> orderIds, @Param("orgIds")
            List<String> orgIds, @Param("workType") String workType, @Param("status") Integer status);

    /**
     * 筛选所有可管理的监测点
     *
     * @param isAdmin
     * @param userId
     * @param orderIds
     * @param orgIds
     * @return
     */
    List<ModelDTO> getAllStationMgrIds(@Param("isAdmin") boolean isAdmin, @Param("userId") String userId, @Param("orderIds") List<String> orderIds,
                                       @Param("orgIds") List<String> orgIds, @Param("workType") String workType);


    /**
     * 筛选有效状态的可管理的监测点
     *
     * @param isAdmin
     * @param userId
     * @param orderIds
     * @param orgIds
     * @return
     */
    List<ModelDTO> getStationMgrIds(@Param("isAdmin") boolean isAdmin, @Param("userId") String userId, @Param("orderIds") List<String> orderIds,
                                    @Param("orgIds") List<String> orgIds, @Param("workType") String workType);

    /**
     * 企业用户可管理监测点
     *
     * @param userId
     * @return
     */
    List<ModelDTO> findCompanyUserStation(@Param("userId") String userId, @Param("workType") String workType);

    /**
     * 企业管理员监测点
     *
     * @param userId
     * @return
     */
    List<ModelDTO> findCompanyManagerStation(@Param("userId") String userId, @Param("workType") String workType);

    /**
     * 企业设备管理员查看监测点
     *
     * @param userId
     * @return
     */
    List<ModelDTO> findCompanyEquipmentManagerStation(@Param("userId") String userId, @Param("workType") String workType);

    /**
     * 根据订单编号查询监测点信息
     *
     * @param orderId  订单编号
     * @param workType 监测点业务种类
     */
    List<StationProjectInfoDTO> findByOrder(@Param("orderId") String orderId, @Param("workType") Integer workType);

    /**
     * 查询监测点的订单信息
     *
     * @param sidSet 监测点编号集合
     * @return
     */
    List<StationProjectInfoDTO> findStationOrderInfo(@Param("stationIdSet") Set<String> stationIdSet);

    /**
     * 根据监测点编号，查询绑定的设备编号
     */
    Set<String> findEquipmentIdByStationId(@Param("stationIdSet") Set<String> stationIdSet);

    /**
     * 查询需要同步的监测点信息
     */
    List<StationSyncDTO> findStationSyncInfo(@Param("businessType") Integer businessType);

    /**
     * 查询监测点绑定信息
     */
    List<StationBindDTO> findStationBindSync(@Param("stationIdSet") Set<String> stationIdSet);

}
